+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
+Sat Oct 3 17:54:48 1998 Tim Janik <timj@gtk.org>
+
+ * gtk/gtkargcollector.c (GTK_ARG_COLLECT_VALUE): for unknown foreign
+ fundamental types, collect an argument of the type returned from
+ gtk_type_get_varargs_type(). removed the first macro argument which
+ was just the same as the fundamental type of the *arg passed to
+ the macro.
+ * gtk/gtkarg.c (gtk_args_collect):
+ * gtk/gtksignal.c (gtk_signal_collect_params): changed callers.
+
+ * gtk/gtktypeutils.h:
+ * gtk/gtktypeutils.c: new functions gtk_type_set_varargs_type() and
+ gtk_type_get_varargs_type() to set and query the varargs collect
+ type used for a fundamental type, registered outside of Gtk.
+
+ * gtk/gtkmisc.c (gtk_misc_class_init): changed object arguments
+ GtkMisc::xalign and GtkMisc::yalign from GTK_TYPE_DOUBLE to
+ GTK_TYPE_FLOAT.
+
+ * gtk/gtkframe.c (gtk_frame_class_init): changed object arguments
+ GtkFrame::label_xalign and GtkFrame::label_yalign from GTK_TYPE_DOUBLE
+ to GTK_TYPE_FLOAT.
+
Sat Oct 3 01:25:24 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkctree.c (gtk_ctree_insert_gnode) (real_tree_collapse)
arg = gtk_arg_new (info->type);
arg->name = (gchar*) arg_name;
- GTK_ARG_COLLECT_VALUE (GTK_FUNDAMENTAL_TYPE (arg->type), arg, var_args, error);
+ GTK_ARG_COLLECT_VALUE (arg, var_args, error);
arg_list = g_slist_prepend (arg_list, arg);
}
if (error)
/* collect a single argument value from a va_list.
* this is implemented as a huge macro <shrug>, because we can't
* pass va_list variables by reference on some systems.
- * the former prototype was:
+ * the corresponding prototype would be:
* static inline gchar*
- * gtk_arg_collect_value (GtkType fundamental_type,
- * GtkArg *arg,
+ * gtk_arg_collect_value (GtkArg *arg,
* va_list var_args);
*/
-#define GTK_ARG_COLLECT_VALUE(_ft, arg, var_args, _error) \
+#define GTK_ARG_COLLECT_VALUE(arg, var_args, _error) \
G_STMT_START { \
- GtkType fundamental_type = _ft; \
gchar *error_msg; \
+ GtkType fundamental_type; \
+ \
+ fundamental_type = GTK_FUNDAMENTAL_TYPE (arg->type); \
+ if (fundamental_type > GTK_TYPE_FUNDAMENTAL_LAST) \
+ { \
+ fundamental_type = gtk_type_get_varargs_type (fundamental_type); \
+ if (!fundamental_type) \
+ fundamental_type = GTK_FUNDAMENTAL_TYPE (arg->type); \
+ } \
\
error_msg = NULL; \
switch (fundamental_type) \
parent_class = gtk_type_class (gtk_bin_get_type ());
gtk_object_add_arg_type ("GtkFrame::label", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_LABEL);
- gtk_object_add_arg_type ("GtkFrame::label_xalign", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_LABEL_XALIGN);
- gtk_object_add_arg_type ("GtkFrame::label_yalign", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_LABEL_YALIGN);
+ gtk_object_add_arg_type ("GtkFrame::label_xalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_LABEL_XALIGN);
+ gtk_object_add_arg_type ("GtkFrame::label_yalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_LABEL_YALIGN);
gtk_object_add_arg_type ("GtkFrame::shadow", GTK_TYPE_SHADOW_TYPE, GTK_ARG_READWRITE, ARG_SHADOW);
object_class->set_arg = gtk_frame_set_arg;
gtk_frame_set_label (frame, GTK_VALUE_STRING (*arg));
break;
case ARG_LABEL_XALIGN:
- gtk_frame_set_label_align (frame, GTK_VALUE_DOUBLE (*arg), frame->label_yalign);
+ gtk_frame_set_label_align (frame, GTK_VALUE_FLOAT (*arg), frame->label_yalign);
break;
case ARG_LABEL_YALIGN:
- gtk_frame_set_label_align (frame, frame->label_xalign, GTK_VALUE_DOUBLE (*arg));
+ gtk_frame_set_label_align (frame, frame->label_xalign, GTK_VALUE_FLOAT (*arg));
break;
case ARG_SHADOW:
gtk_frame_set_shadow_type (frame, GTK_VALUE_ENUM (*arg));
GTK_VALUE_STRING (*arg) = g_strdup (frame->label);
break;
case ARG_LABEL_XALIGN:
- GTK_VALUE_DOUBLE (*arg) = frame->label_xalign;
+ GTK_VALUE_FLOAT (*arg) = frame->label_xalign;
break;
case ARG_LABEL_YALIGN:
- GTK_VALUE_DOUBLE (*arg) = frame->label_yalign;
+ GTK_VALUE_FLOAT (*arg) = frame->label_yalign;
break;
case ARG_SHADOW:
GTK_VALUE_ENUM (*arg) = frame->shadow_type;
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
- gtk_object_add_arg_type ("GtkMisc::xalign", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_XALIGN);
- gtk_object_add_arg_type ("GtkMisc::yalign", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_YALIGN);
+ gtk_object_add_arg_type ("GtkMisc::xalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_XALIGN);
+ gtk_object_add_arg_type ("GtkMisc::yalign", GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_YALIGN);
gtk_object_add_arg_type ("GtkMisc::xpad", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_XPAD);
gtk_object_add_arg_type ("GtkMisc::ypad", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_YPAD);
switch (arg_id)
{
case ARG_XALIGN:
- gtk_misc_set_alignment (misc, GTK_VALUE_DOUBLE (*arg), misc->yalign);
+ gtk_misc_set_alignment (misc, GTK_VALUE_FLOAT (*arg), misc->yalign);
break;
case ARG_YALIGN:
- gtk_misc_set_alignment (misc, misc->xalign, GTK_VALUE_DOUBLE (*arg));
+ gtk_misc_set_alignment (misc, misc->xalign, GTK_VALUE_FLOAT (*arg));
break;
case ARG_XPAD:
gtk_misc_set_padding (misc, GTK_VALUE_INT (*arg), misc->ypad);
switch (arg_id)
{
case ARG_XALIGN:
- GTK_VALUE_DOUBLE (*arg) = misc->xalign;
+ GTK_VALUE_FLOAT (*arg) = misc->xalign;
break;
case ARG_YALIGN:
- GTK_VALUE_DOUBLE (*arg) = misc->yalign;
+ GTK_VALUE_FLOAT (*arg) = misc->yalign;
break;
case ARG_XPAD:
GTK_VALUE_INT (*arg) = misc->xpad;
{
register gchar *error;
- params->type = *(param_types++);
params->name = NULL;
- GTK_ARG_COLLECT_VALUE (GTK_FUNDAMENTAL_TYPE (params->type),
- params,
+ params->type = *(param_types++);
+ GTK_ARG_COLLECT_VALUE (params,
var_args,
error);
if (error)
return gtk_type_enum_find_value (flag_type, value_name);
}
+typedef struct _GtkTypeVarargType GtkTypeVarargType;
+struct _GtkTypeVarargType
+{
+ GtkType foreign_type;
+ GtkType varargs_type;
+};
+
+static GtkTypeVarargType *vararg_types = NULL;
+static guint n_vararg_types = 0;
+
+void
+gtk_type_set_varargs_type (GtkType foreign_type,
+ GtkType varargs_type)
+{
+ g_return_if_fail (foreign_type == GTK_FUNDAMENTAL_TYPE (foreign_type));
+ g_return_if_fail (foreign_type > GTK_TYPE_FUNDAMENTAL_LAST);
+
+ if (!((varargs_type >= GTK_TYPE_STRUCTURED_FIRST &&
+ varargs_type <= GTK_TYPE_STRUCTURED_LAST) ||
+ (varargs_type >= GTK_TYPE_FLAT_FIRST &&
+ varargs_type <= GTK_TYPE_FLAT_LAST) ||
+ varargs_type == GTK_TYPE_NONE))
+ {
+ g_warning ("invalid varargs type `%s' for fundamental type `%s'",
+ gtk_type_name (varargs_type),
+ gtk_type_name (foreign_type));
+ return;
+ }
+ if (gtk_type_get_varargs_type (foreign_type))
+ {
+ g_warning ("varargs type is already registered for fundamental type `%s'",
+ gtk_type_name (foreign_type));
+ return;
+ }
+
+ n_vararg_types++;
+ vararg_types = g_realloc (vararg_types, sizeof (GtkTypeVarargType) * n_vararg_types);
+
+ vararg_types[n_vararg_types - 1].foreign_type = foreign_type;
+ vararg_types[n_vararg_types - 1].varargs_type = varargs_type;
+}
+
+GtkType
+gtk_type_get_varargs_type (GtkType foreign_type)
+{
+ GtkType type;
+ guint i;
+
+ type = GTK_FUNDAMENTAL_TYPE (foreign_type);
+ if (type <= GTK_TYPE_FUNDAMENTAL_LAST)
+ return type;
+
+ for (i = 0; i < n_vararg_types; i++)
+ if (vararg_types[i].foreign_type == type)
+ return vararg_types[i].varargs_type;
+
+ return 0;
+}
+
static inline GtkType
gtk_type_register_intern (gchar *name,
GtkType parent,
const gchar *value_name);
GtkFlagValue* gtk_type_flags_find_value (GtkType flag_type,
const gchar *value_name);
+/* set the argument collector alias for foreign fundamentals */
+void gtk_type_set_varargs_type (GtkType foreign_type,
+ GtkType varargs_type);
+GtkType gtk_type_get_varargs_type (GtkType foreign_type);
+
+
+
+
#ifdef __cplusplus
}